package cn.edu.imau.zy.system.service.impl;

import cn.edu.imau.zy.common.core.entity.system.SysNews;
import cn.edu.imau.zy.common.core.text.Convert;
import cn.edu.imau.zy.common.utils.DateUtils;
import cn.edu.imau.zy.system.mapper.SysNewsMapper;
import cn.edu.imau.zy.system.service.ISysNewsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 新闻公告Service业务层处理
 * 
 * @author wyz
 * @date 2020-07-10
 */
@Service
public class SysNewsServiceImpl extends ServiceImpl<SysNewsMapper,SysNews> implements ISysNewsService
{
    @Autowired
    private SysNewsMapper sysNewsMapper;

    /**
     * 查询新闻公告
     * 
     * @param id 新闻公告ID
     * @return 新闻公告
     */
    @Override
    public SysNews selectSysNewsById(Long id)
    {
        return sysNewsMapper.selectSysNewsById(id);
    }

    /**
     * 查询新闻公告列表
     * 
     * @param sysNews 新闻公告
     * @return 新闻公告
     */
    @Override
    public List<SysNews> selectSysNewsList(SysNews sysNews)
    {
        return sysNewsMapper.selectSysNewsList(sysNews);
    }

    /**
     * 小程序查询新闻公告列表
     *
     * @param sysNews 新闻公告
     * @return 新闻公告
     */
    @Override
    public List<SysNews> appSysNewsList(SysNews sysNews) {
        return sysNewsMapper.appSysNewsList(sysNews);
    }

    /**
     * 新增新闻公告
     * 
     * @param sysNews 新闻公告
     * @return 结果
     */
    @Override
    public int insertSysNews(SysNews sysNews)
    {
        if(this.getImgSrc(sysNews.getContent()).size()>0 && this.getImgSrc(sysNews.getContent()).size()<= 2 ){
            sysNews.setPictureAddress(this.getImgSrc(sysNews.getContent()).get(0));
        }
        if(this.getImgSrc(sysNews.getContent()).size()>= 3){
            String [] arr = new String[3];
            arr[0]= this.getImgSrc(sysNews.getContent()).get(0);
            arr[1]= this.getImgSrc(sysNews.getContent()).get(1);
            arr[2]= this.getImgSrc(sysNews.getContent()).get(2);
            sysNews.setPictureAddress(arr[0]+","+arr[1]+","+arr[2]);

        }
        sysNews.setCreateTime(DateUtils.getNowDate());
        return sysNewsMapper.insertSysNews(sysNews);
    }

    public  List<String> getImgSrc(String content) {
        List<String> list = new ArrayList<String>();
        //目前img标签标示有3种表达式
        //<img alt="" src="1.jpg"/>   <img alt="" src="1.jpg"></img>     <img alt="" src="1.jpg">
        //开始匹配content中的<img />标签
        Pattern p_img = Pattern.compile("<(img|IMG)(.*?)(/>|></img>|>)");
        Matcher m_img = p_img.matcher(content);
        boolean result_img = m_img.find();
        if (result_img) {
            while (result_img) {
                //获取到匹配的<img />标签中的内容
                String str_img = m_img.group(2);

                //开始匹配<img />标签中的src
                Pattern p_src = Pattern.compile("(src|SRC)=(\"|\')(.*?)(\"|\')");
                Matcher m_src = p_src.matcher(str_img);
                if (m_src.find()) {
                    String str_src = m_src.group(3);
                    list.add(str_src);
                }
                //结束匹配<img />标签中的src
                //匹配content中是否存在下一个<img />标签，有则继续以上步骤匹配<img />标签中的src
                result_img = m_img.find();
            }
        }
        return list;
    }




    /**
     * 修改新闻公告
     * 
     * @param sysNews 新闻公告
     * @return 结果
     */
    @Override
    public int updateSysNews(SysNews sysNews)
    {
        if( this.getImgSrc(sysNews.getContent()).size()>0 && this.getImgSrc(sysNews.getContent()).size()<= 2){
            sysNews.setPictureAddress(this.getImgSrc(sysNews.getContent()).get(0));
        }
        if (this.getImgSrc(sysNews.getContent()).size()>= 3 ) {
            String [] array = new String[3];
            array[0]= this.getImgSrc(sysNews.getContent()).get(0);
            array[1]= this.getImgSrc(sysNews.getContent()).get(1);
            array[2]= this.getImgSrc(sysNews.getContent()).get(2);
            sysNews.setPictureAddress(array[0]+","+array[1]+","+array[2]);
        }
        sysNews.setUpdateTime(DateUtils.getNowDate());
        return sysNewsMapper.updateSysNews(sysNews);
    }

    /**
     * 删除新闻公告对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteSysNewsByIds(String ids)
    {
        return sysNewsMapper.deleteSysNewsByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除新闻公告信息
     * 
     * @param id 新闻公告ID
     * @return 结果
     */
    @Override
    public int deleteSysNewsById(Long id)
    {
        return sysNewsMapper.deleteSysNewsById(id);
    }

    @Override
    public void visitsAdd(String id) {
        sysNewsMapper.visitsAdd(id);
    }
}
